解答1[Java]:

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int i = 0;
        int j = numbers.length - 1;
        int[] result = new int[2];
        for (; i < j;) {
            if (numbers[i] + numbers[j] == target) {
                result[0] = i + 1;
                result[1] = j + 1;
                return result;
            } else if (numbers[i] + numbers[j] < target) {
                i++;
            } else {
                j--;
            }
        }

        return result;
    }
}

思路

一头一尾两个指针不断向中间靠拢。

解答2

思路

利用传入的数组已经有序的特点。

从头开始选一个值 i,然后在剩下的长度中进行二分搜索 target-i 这个值。

results matching ""

    No results matching ""